#ifndef CSLEP_H
#define CSLEP_H

#include "slepbase.h"

#ifdef __cplusplus
extern "C" {
#endif

/* L1R */
int LeastR(slep_matrix* A, slep_vector* y, double z, OPTS *opts, 
			slep_vector* x, slep_vector* funVal, slep_vector* valueL);

void LogisticR(slep_matrix* A, slep_vector* y, double z, OPTS* opts,
				 slep_vector* x, double *c, slep_vector* funVal, slep_vector* valueL);

int nnLeastR(slep_matrix* A, slep_vector* y, double z, OPTS *opts, 
			slep_vector* x, slep_vector* funVal, slep_vector* valueL);

void nnLogisticR(slep_matrix* A, slep_vector* y, double z, OPTS* opts,
				 slep_vector* x, double *c, slep_vector* funVal);

/* L1C */
int LeastC(slep_matrix* A, slep_vector* y, double z, OPTS *opts,
			slep_vector* x, slep_vector* funVal, slep_vector* valueL);

void LogisticC(slep_matrix* A, slep_vector* y, double z, OPTS* opts,
				 slep_vector* x, double *c, slep_vector* funVal, slep_vector* valueL);

int nnLeastC(slep_matrix* A, slep_vector* y, double z, OPTS *opts,
			slep_vector* x, slep_vector* funVal);

void nnLogisticC(slep_matrix* A, slep_vector* y, double z, OPTS* opts,
				 slep_vector* x, double *c, slep_vector* funVal);

/* Lq1C */
void glLeastR(slep_matrix* A, slep_vector* y, double z, OPTS* opts,
				 slep_vector* x, slep_vector* funVal, slep_vector* valueL);

void glLogisticR(slep_matrix* A, slep_vector* y, double z, OPTS* opts,
				 slep_vector* x, double *c, slep_vector* funVal, slep_vector* valueL);

void mtLeastR(slep_matrix* A, slep_vector* y, double z, OPTS* opts,
			  slep_matrix* X, slep_vector* funVal, slep_vector* valueL);

void mtLogisticR(slep_matrix* A, slep_vector* y, double z, OPTS* opts,
			  slep_matrix* X, slep_vector *c_v, slep_vector* funVal, slep_vector* valueL);

void mcLeastR(slep_matrix* A, slep_matrix* Y, double z, OPTS* opts,
			  slep_matrix* X, slep_vector* funVal, slep_vector* valueL);

void mcLogisticR(slep_matrix* A, slep_matrix* Y, double z, OPTS* opts,
			  slep_matrix* X, slep_vector *c_v, slep_vector* funVal, slep_vector* valueL);

/* L21C */
void mtLeastC(slep_matrix* A, slep_vector* y, double z, OPTS* opts,
			  slep_matrix* X, slep_vector* funVal, slep_vector* valueL);

void mtLogisticC(slep_matrix* A, slep_vector* y, double z, OPTS* opts,
			  slep_matrix* X, slep_vector *c_v, slep_vector* funVal, slep_vector* valueL);

void mcLeastC(slep_matrix* A, slep_matrix* Y, double z, OPTS* opts,
			  slep_matrix* X, slep_vector* funVal, slep_vector* valueL);

void mcLogisticC(slep_matrix* A, slep_matrix* Y, double z, OPTS* opts,
			  slep_matrix* X, slep_vector *c_v, slep_vector* funVal, slep_vector* valueL);

#ifdef __cplusplus
}
#endif


#endif //CSLEP_H